/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package regras;

import interfaces.VerificadorDeRegras;

/**
 *
 * @author Matheus
 */
public class verificaSeExistemCaixaAltaOuBaixaOuDigitoESimbolo implements VerificadorDeRegras {
    @Override
    public int regra(String senha) {
       boolean caixaAlta = false;
       boolean caixaBaixa = false;
       boolean digito = false;
       boolean simbolo = false;
       char simbolos[] = new char[11];
       simbolos[0] = '!';
       simbolos[1] = '@';
       simbolos[2] = '#';
       simbolos[3] = '$';
       simbolos[4] = '%';
       simbolos[5] = '^';
       simbolos[6] = '&';
       simbolos[7] = '*';
       simbolos[8] = '?';
       simbolos[9] = '_';
       simbolos[10] = '~';
       for (int i = 0; i < senha.length(); i++)
       {
           for (int j = 0; j < simbolos.length; j++)
           {
               if (senha.charAt(i) == simbolos[j])
               {
                   simbolo = true;
                   break;
               }
               if ( simbolo ) {
                   break;
               }
           }
       }
       for (char a : senha.toCharArray())
       {
            if (Character.isLetter(a)) {
                if (Character.isUpperCase(a))
                {
                    caixaAlta = true;
                    break;
                }
            }
        }
        for (char a : senha.toCharArray())
        {
            if (Character.isLetter(a)) {
                if (Character.isLowerCase(a))
                {
                    caixaBaixa = true;
                    break;
                }
            }
        }
        for (char a : senha.toCharArray())
        {
            if (Character.isDigit(a))
            {
                digito = true;
                break;
            }
        }
        if ((digito || caixaBaixa || caixaAlta) && simbolo) {
            return 2;
        }
        return 0;
    }    
}
